﻿using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Collections.Generic;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using GC2.Bussines;
using GC2.Bussines.BMAdmin;
using GC2.Entities.Admin;
using GC2.Entities.Comunes;
using GC2.Entities.Seguridad;
using GC2.ExceptionHandler;

public partial class AdmCompras : GenericPage
{
    #region Propiedades

    Usuarios usuario = new Usuarios();
    List<Impuestos> listaTasas = new List<Impuestos>();
    GC2.Funciones.General.FunctionsSite f = new GC2.Funciones.General.FunctionsSite();

    //protected List<ComprasDet> listaComprasDet = new List<ComprasDet>();
    private List<ComprasDet> listaComprasDet
    {
        get
        {
            return (List<ComprasDet>)Session["listaComprasDet"];
        }
        set
        {
            Session["listaComprasDet"] = value;
        }
    }

    private Cajas oCaja
    {
        get
        {
            return (Cajas)Session["oCaja"];
        }
        set
        {
            Session["oCaja"] = value;
        }
    }

    #endregion

    #region Controles

    #region Page_Load
    protected void Page_Load(object sender, EventArgs e)
    {
        try
        {
            SetearCultura();
            SetearConexion();
            if (!IsPostBack)
            {
                usuario = (Usuarios)Session["UsuarioActual"];

                if (usuario.Login == "Ventas")
                {
                    lblMensaje.Text = "Este usuario es para Ventas";
                    mpeMensaje.Show();
                    return;
                }

                lblPF.Visible = false;
                lblPFMes.Visible = false;
                lblPFAnio.Visible = false;
                trImp1.Visible = false;
                trImp2.Visible = false;
                FechaVto.SetFecha(null);
                usuario = (Usuarios)Session["UsuarioActual"];
                BMProveedores bmProveedores = new BMProveedores(Connection);
                Proveedores proveedor = new Proveedores();
                List<Proveedores> listaProveedores = new List<Proveedores>();
                listaProveedores = bmProveedores.BMProveedoresSearch(proveedor);
                Session["listaProveedores"] = listaProveedores;
                int iAccion = 1;
                if (!String.IsNullOrEmpty(Request.QueryString["Accion"]))
                {
                    iAccion = Convert.ToInt16(Request.QueryString["Accion"].ToString());
                }
                Session["Accion"] = iAccion;
                listaComprasDet = new List<ComprasDet>();
                Session["listaComprasDet"] = listaComprasDet;
                CargarTalonarios();
                CargarTasas();

                if (iAccion == 1)
                {
                    NuevaCompra();
                    btnEliminar.Visible = false;
                }
                else
                {
                    CargarCCostos(iAccion);
                }
                if (iAccion == 2)
                {
                    CargarCompra();
                }
                if (iAccion == 3)
                {
                    CargarCompra();
                }
                              

                // los siguientes atributos estan manejados de esta manera
                // porque asp.net a veces pierde los valores de los txtbox si la propiedad
                // ReadOnly = True en tiempo de diseño.
                txtIdArticulo.Attributes.Add("readonly", "readonly");
                txtArticulo.Attributes.Add("readonly", "readonly");
                txtStock.Attributes.Add("readonly", "readonly");
                //txtLote.Attributes.Add("readonly", "readonly");
                txtProveedor.Attributes.Add("readonly", "readonly");
                txtSaldo.Attributes.Add("readonly", "readonly");
                txtCodBarra.Attributes.Add("onkeydown", "if (event.keyCode==13) {event.keyCode=0; document.getElementById('" + btnCodBarra.ClientID + "').click();}");

                if (iAccion == 1)
                {
                    VerificaCaja();
                }
            }
            listaComprasDet = (List<ComprasDet>)Session["listaComprasDet"];
        }
        catch (Exception ex) { ErrorUI(ex); }
    }
    #endregion

    #region txtIdProveedor_TextChanged
    protected void txtIdProveedor_TextChanged(object sender, EventArgs e)
    {
        try
        {
            if (txtProveedor.Text == "")
            {
                txtProveedor.Text = "";
                txtIdProveedor.Attributes.Add("readonly", "readonly");
                BuscarProveedor();
            }
        }
        catch (Exception ex) { ErrorUI(ex); }
    }
    #endregion

    #region btnBuscarProveedor_Click
    protected void btnBuscarProveedor_Click(object sender, EventArgs e)
    {
        try
        {
            txtIdProveedor.Text = "";
            txtProveedor.Text = "";
            txtIdProveedor.Attributes.Add("readonly", "readonly");
            BuscarProveedor();
        }
        catch (Exception ex) { ErrorUI(ex); }
    }
    #endregion

    #region btnLimpiar_Click
    protected void btnLimpiar_Click(object sender, EventArgs e)
    {
        try
        {
            Limpiar();
            LimpiarItem();
            ActualizarTotalCompra();
            btnBuscarArticulo.Enabled = true;
            trArticulo3.Visible = true;
            txtIdArticulo.Text = "";
            lblTitulo.Text = "COMPRAS - Bienes de Cambio";
            txtArticulo.Attributes.Clear();
            txtArticulo.Attributes.Add("readonly", "readonly");
            txtLote.Enabled = true;
            chkSS.Enabled = true;
            chkSS.Checked = false;
        }
        catch (Exception ex) { ErrorUI(ex); }
    }
    #endregion

    #region btnCancelar_Click
    protected void btnCancelar_Click(object sender, EventArgs e)
    {
        Response.Redirect("~/Seguridad/Default.aspx", false);
    }
    #endregion

    #region btnGuardar_Click
    protected void btnGuardar_Click(object sender, EventArgs e)
    {
        try
        {
            Decimal dPago = 0;
            if (txtPago.Text != "")
            {
                dPago = Convert.ToDecimal(txtPago.Text.Trim());
            }
            Decimal dCtaCte = 0;
            if (txtCtaCte.Text != "")
            {
                dCtaCte = Convert.ToDecimal(txtCtaCte.Text.Trim());
            }
            Decimal dTotal = 0;
            if (txtTotal.Text != "")
            {
                dTotal = Convert.ToDecimal(txtTotal.Text.Trim());
            }

            if (cboTalon.SelectedValue == "1")
            {
                DateTime dFecha = DateTime.Parse(Fecha.GetFecha().ToString());
                PFCompras pfCompras = (PFCompras)Session["pfCompras"];

                if (pfCompras.PFMes != dFecha.Month || pfCompras.PFAnio != dFecha.Year)
                {
                    lblMensaje.Text = "La Fecha no corresponde al Período Fiscal.";
                    mpeMensaje.Show();
                    return;
                }
            }

            Decimal dTemp = dPago + dCtaCte;
            if (dTotal == dTemp)
            {
                int iAccion = Convert.ToInt16(Session["Accion"]);
                if (txtIdProveedor.Text != "")
                {
                    if (txtTotal.Text != "" && dTotal > 0)
                    {
                        if (iAccion == 1)
                        {
                            Guardar();
                        }
                    }
                    else
                    {
                        lblMensaje.Text = "Debe informar Cantidad y Precio.";
                        mpeMensaje.Show();
                    }
                }
                else
                {
                    lblMensaje.Text = "Falta Seleccionar Proveedor.";
                    mpeMensaje.Show();
                }
            }
            else
            {
                lblMensaje.Text = "La suma de Pago y Cta. Cte. no conforman el Total.";
                mpeMensaje.Show();
            }
        }
        catch (Exception ex) { ErrorUI(ex); }
    }
    #endregion

    #region btnNuevaCompra_Click
    protected void btnNuevaCompra_Click(object sender, EventArgs e)
    {
        try
        {
            NuevaCompra();
        }
        catch (Exception ex) { ErrorUI(ex); }
    }
    #endregion

    #region txtPago_TextChanged
    protected void txtPago_TextChanged(object sender, EventArgs e)
    {
        try
        {
            if (txtPago.Text != "")
            {
                Decimal dTotal = Convert.ToDecimal(txtTotal.Text);
                Decimal dPago = Convert.ToDecimal(txtPago.Text.Trim());
                if (dPago > dTotal)
                {
                    lblMensaje.Text = "Importe de Pago Incorrecto.";
                    mpeMensaje.Show();
                }
                else
                {
                    Decimal dSaldo = dTotal - dPago;
                    txtCtaCte.Text = Convert.ToDecimal(dSaldo).ToString();
                }
            }
        }
        catch (Exception ex) { ErrorUI(ex); }
    }
    #endregion

    #region txtCtaCte_TextChanged
    protected void txtCtaCte_TextChanged(object sender, EventArgs e)
    {
        try
        {
            if (txtCtaCte.Text != "")
            {
                Decimal dTotal = Convert.ToDecimal(txtTotal.Text);
                Decimal dSaldo = Convert.ToDecimal(txtCtaCte.Text.Trim());
                if (dSaldo > dTotal)
                {
                    lblMensaje.Text = "Importe de Cta. Cte. Incorrecto.";
                    mpeMensaje.Show();
                }
                else
                {
                    Decimal dPago = dTotal - dSaldo;
                    txtPago.Text = Convert.ToDecimal(dPago).ToString();
                }
            }
        }
        catch (Exception ex) { ErrorUI(ex); }
    }
    #endregion

    #region btnBuscarArticulo_Click
    protected void btnBuscarArticulo_Click(object sender, EventArgs e)
    {
        try
        {
            BuscarArticulo();
        }
        catch (Exception ex) { ErrorUI(ex); }
    }
    #endregion

    #region gvComprasDet_PageIndexChanging
    protected void gvComprasDet_PageIndexChanging(object sender, GridViewPageEventArgs e)
    {
        try
        {
            try
            {
                gvComprasDet.PageIndex = e.NewPageIndex;
                gridDataBaund();
            }
            catch (Exception ex) { ErrorUI(ex); }
        }
        catch (Exception ex) { ErrorUI(ex); }
    }
    #endregion

    #region gvComprasDet_RowDeleting
    protected void gvComprasDet_RowDeleting(object sender, GridViewDeleteEventArgs e)
    {
        try
        {
            ComprasDet comprasDet = new ComprasDet();
            comprasDet.Item = listaComprasDet[e.RowIndex].Item;
            List<ComprasDet> listaTemp = listaComprasDet;
            listaComprasDet = new List<ComprasDet>();
            foreach (ComprasDet item in listaTemp)
            {
                if (item.Item != comprasDet.Item)
                {
                    listaComprasDet.Add(item);
                }
            }
            Session["listaComprasDet"] = listaComprasDet;
            ActualizarGrilla();
            ActualizarTotalCompra();
        }
        catch (Exception ex) { ErrorUI(ex); }
    }
    #endregion

    #region gvComprasDet_RowDataBound
    protected void gvComprasDet_RowDataBound(object sender, GridViewRowEventArgs e)
    {
        try
        {
            if (e.Row.RowType == DataControlRowType.DataRow)
            {
                int iAccion = Convert.ToInt16(Session["Accion"]);
                if (iAccion == 3)
                {
                    e.Row.Cells[10].Visible = false;
                }
            }
        }
        catch (Exception ex) { ErrorUI(ex); }
    }
    #endregion

    #region txtCantidad_TextChanged
    protected void txtCantidad_TextChanged(object sender, EventArgs e)
    {
        try
        {
            if (txtCantidad.Text != "" && txtPrecio.Text != "")
            {
                Decimal dCantidad = Convert.ToDecimal(txtCantidad.Text);
                if (dCantidad > 0)
                {
                    Decimal dPrecio = Convert.ToDecimal(txtPrecio.Text);
                    Decimal dItem = dCantidad * dPrecio;
                    txtTotalItem.Text = dItem.ToString();
                }
                else
                {
                    lblMensaje.Text = "Debe informar Cantidad y Precio.";
                    mpeMensaje.Show();
                }
            }
            else
            {
                lblMensaje.Text = "Debe informar Cantidad y Precio.";
                mpeMensaje.Show();
            }
        }
        catch (Exception ex) { ErrorUI(ex); }
    }
    #endregion

    #region txtPrecio_TextChanged
    protected void txtPrecio_TextChanged(object sender, EventArgs e)
    {
        try
        {
            
            if (txtCantidad.Text != "" && txtPrecio.Text != "")
            {
                Decimal dCantidad = Convert.ToDecimal(txtCantidad.Text);
                if (dCantidad == 0)
                {
                    if (f.isNumeric(txtCantBarra.Text.Trim()))
                    {
                        dCantidad = Convert.ToInt16(txtCantBarra.Text.Trim());
                    }
                }
                if (dCantidad > 0)
                {
                    Decimal dPrecio = Convert.ToDecimal(txtPrecio.Text);
                    Decimal dItem = dCantidad * dPrecio;
                    txtTotalItem.Text = dItem.ToString();
                }
                else
                {
                    lblMensaje.Text = "Debe informar Cantidad y Precio.";
                    mpeMensaje.Show();
                }
            }
            else
            {
                lblMensaje.Text = "Debe informar Cantidad y Precio.";
                mpeMensaje.Show();
            }
        }
        catch (Exception ex) { ErrorUI(ex); }
    }
    #endregion

    #region btnAgregar_Click
    protected void btnAgregar_Click(object sender, EventArgs e)
    {
        try
        {
            if (txtTotalItem.Text != "")
            {
                Decimal dTotalItem = Convert.ToDecimal(txtTotalItem.Text);
                if (dTotalItem != 0)
                {
                    AgregarItem();
                }
                else
                {
                    lblMensaje.Text = "Debe informar Cantidad y Precio.";
                    mpeMensaje.Show();
                }
            }
            else
            {
                lblMensaje.Text = "Debe informar Cantidad y Precio.";
                mpeMensaje.Show();
            }
            chkSS.Enabled = false;
        }
        catch (Exception ex) { ErrorUI(ex); }
    }
    #endregion

    #region btnEliminar_Click
    protected void btnEliminar_Click(object sender, EventArgs e)
    {
        try
        {
            Eliminar();
        }
        catch (Exception ex) { ErrorUI(ex); }
    }
    #endregion

    #region cboTalon_SelectedIndexChanged
    protected void cboTalon_SelectedIndexChanged(object sender, EventArgs e)
    {
        try
        {
            if (cboTalon.SelectedItem.Value != "0")
            {
                tdFactura1.Visible = true;
                tdFactura2.Visible = true;
                trTasa.Visible = true;
                lblPF.Visible = true;
                lblPFMes.Visible = true;
                lblPFAnio.Visible = true;
                BMPFCompras bmPFCompras = new BMPFCompras(Connection);
                PFCompras pfCompras = bmPFCompras.BMPFComprasGet();
                List<Meses> listaMeses = ListaMeses();
                foreach (Meses mes in listaMeses)
                {
                    if (mes.Mes == pfCompras.PFMes)
                    {
                        lblPFMes.Text = mes.Nombre;
                        Session["pfCompras"] = pfCompras;
                        break;
                    }
                }
                lblPFAnio.Text = pfCompras.PFAnio.ToString();
                trImp1.Visible = true;
                trImp2.Visible = true;
            }
            else
            {
                tdFactura1.Visible = false;
                tdFactura2.Visible = false;
                trTasa.Visible = false;
                lblPF.Visible = false;
                lblPFMes.Visible = false;
                lblPFAnio.Visible = false;
                Session["pfCompras"] = null;
                trImp1.Visible = false;
                trImp2.Visible = false;
            }
        }
        catch (Exception ex) { ErrorUI(ex); }
    }
    #endregion

    #region cboTasas_SelectedIndexChanged
    protected void cboTasas_SelectedIndexChanged(object sender, EventArgs e)
    {
        try
        {
            int iTasa = int.Parse(cboTasas.SelectedItem.Value);
            listaTasas = (List<Impuestos>)Session["listaTasas"];
            foreach (Impuestos item in listaTasas)
            {
                if (iTasa == item.Id)
                {
                    decimal dTasa = decimal.Parse(item.Tasa.ToString());
                    txtTasa.Text = dTasa.ToString();
                }
            }
        }
        catch (Exception ex) { ErrorUI(ex); }
    }
    #endregion

    #region btnCodBarra_Click
    protected void btnCodBarra_Click(object sender, EventArgs e)
    {
        if (!txtCodBarra.Text.Equals(""))
        {
            //codigo de barras, ej.: 123456 esta en la base
            AgregaCodigoBarras();
        }
    }
    #endregion

    #region chkSS_CheckedChanged
    protected void chkSS_CheckedChanged(object sender, EventArgs e)
    {
        if (chkSS.Checked)
        {
            btnBuscarArticulo.Enabled = false;
            trArticulo3.Visible = false;
            txtIdArticulo.Text = "0";
            lblTitulo.Text = "COMPRAS - Bienes de Uso (Sin Stock)";
            txtArticulo.Attributes.Clear();
            //txtArticulo.Attributes.Add("readonly", "");
            txtLote.Enabled = false;
            SubRubros subRubro = new SubRubros();
            subRubro.SubRubro = "Sin Stock";
            subRubro.Rubro = "Bienes de Uso";
            Session["SubRubro"] = subRubro;
            txtStock.Text = "0";
        }
        else
        {
            btnBuscarArticulo.Enabled = true;
            trArticulo3.Visible = true;
            txtIdArticulo.Text = "";
            lblTitulo.Text = "COMPRAS - Bienes de Cambio";
            txtArticulo.Attributes.Clear();
            txtArticulo.Attributes.Add("readonly", "readonly");
            txtLote.Enabled = true;
        }
    }
    #endregion

    #endregion

    #region Métodos

    #region BuscarProveedor
    public void BuscarProveedor()
    {
        try
        {
            List<Proveedores> listaProveedores = new List<Proveedores>();
            listaProveedores = (List<Proveedores>)Session["listaProveedores"];
            Proveedores proveedor = new Proveedores();
            if (txtIdProveedor.Text.Trim() != "")
            {
                proveedor.Id_Proveedor = Convert.ToInt16(txtIdProveedor.Text.Trim());
            }
            proveedor.Nombre = txtProveedor.Text.Trim();

            bool encontrado = false;
            foreach (Proveedores item in listaProveedores)
            {
                if (item.Id_Proveedor == proveedor.Id_Proveedor)
                {
                    txtIdProveedor.Text = item.Id_Proveedor.ToString();
                    txtProveedor.Text = item.Nombre;
                    txtSaldo.Text = item.Saldo.ToString();
                    encontrado = true;
                    break;
                }
                if (item.Nombre == proveedor.Nombre)
                {
                    txtIdProveedor.Text = item.Id_Proveedor.ToString();
                    txtProveedor.Text = item.Nombre;
                    txtSaldo.Text = item.Saldo.ToString();
                    encontrado = true;
                    break;
                }
            }

            if (!encontrado)
            {
                txtIdProveedor.Text = "";
                txtProveedor.Text = "";
                #region dispararPopUp(hacePostBack)

                string scriptSession = @"
            <script language=""javascript"" type=""text/javascript"">
            <!--
                function mostrarProveedor()
                {
                    var stringURL = 'BuscarProveedor.aspx?pStation=0';
                    var oINPUTS = document.getElementsByTagName (""INPUT"");
                    for(var a=0;a<oINPUTS.length; a++)
                    {
                        //Validaciones para cuando el control fue arrastrado a un PopUP (Sin MasterPage)

                        if(oINPUTS[a].getAttribute(""id"") == 'ct100_DefaultContent_txtIdConcepto')
                        {
                            //alert('U1a: &IdConcepto = ' + oINPUTS[a].getAttribute(""value""));
                            stringURL = stringURL + '&Id_Concepto=' + oINPUTS[a].getAttribute(""value"");
                        }
                        if(oINPUTS[a].getAttribute(""id"") == 'ct100_DefaultContent_txtConcepto')
                        {  
                            //alert('U2a: &Concepto = ' + oINPUTS[a].getAttribute(""value""));
                            stringURL = stringURL + '&Concepto=' + oINPUTS[a].getAttribute(""value"");
                        }
                    }
                    // alert(stringURL);
                    var newWin = window.open(stringURL, ""popup"", ""menubar=no, resizable=no, scrollbars=yes, height=450, width=550, left=100, top=100"");
                }
                mostrarProveedor();
            //-->
            </script>
            ";

                Page.ClientScript.RegisterStartupScript(this.GetType(), "ScriptA", scriptSession);
                #endregion
            }
        }
        catch (Exception ex) { ErrorUI(ex); }
    }
    #endregion

    #region VerificaCaja
    public void VerificaCaja()
    {
        try
        {
            if (oCaja == null)
            {
                Cajas oCajatmp = new Cajas();
                oCaja = oCajatmp;
            }
            oCaja.Id_Usuario = UsuarioActual().Id_Usuario;
            BMCajas bmCajas = new BMCajas(Connection);
            oCaja = bmCajas.BMCajasAbiertaByUsuario(oCaja);
            if (oCaja.Id_Caja > 0)
            {
                TraeCaja(oCaja);
            }
            else
            {
                lblAccion.Text = "No hay caja abierta";
                btnBuscarProveedor.Enabled = false;
                btnBuscarArticulo.Enabled = false;
                btnAgregar.Enabled = false;
                btnGuardar.Enabled = false;
                btnLimpiar.Enabled = false;
                return;
            }
        }
        catch (Exception ex) { ErrorUI(ex); }
    }
    #endregion
   
    #region TraeCaja
    public void TraeCaja(Cajas oCaja)
    {
        try
        {
            /// Carga lista items de Caja
            ItemCaja itemCaja = new ItemCaja();
            List<ItemCaja> listaCaja = new List<ItemCaja>();
            BMItemCaja bmItemCaja = new BMItemCaja(Connection);
            itemCaja.Id_Caja = oCaja.Id_Caja;
            listaCaja = bmItemCaja.BMlistaCaja(itemCaja);
            Session["listaCaja"] = listaCaja;
        }
        catch (Exception ex) { ErrorUI(ex); }
    }
    #endregion

    #region Guardar
    public void Guardar()
    {
        try
        {
            BMCompras bmCompras = new BMCompras(Connection);
            Compras compra = new Compras();
            BMComprasDet bmComprasDet = new BMComprasDet(Connection);

            compra = bmCompras.BMComprasGetNext();
            txtIdCompra.Text = compra.Id_Compras.ToString();

            // datos para Cabecera de Compras
            compra.Id_Compras = Convert.ToInt16(txtIdCompra.Text.Trim());
            compra.Id_Proveedor = Convert.ToInt16(txtIdProveedor.Text.Trim());
            compra.Proveedor = txtProveedor.Text;
            Usuarios usuario = new Usuarios();
            usuario = (Usuarios)Session["UsuarioActual"];
            compra.Id_Usuario = usuario.Id_Usuario;
            compra.Id_Estado = 1;
            compra.Estado = "Activo";
            compra.Fecha = Fecha.GetFecha();
            compra.CtaCte = Convert.ToDecimal(txtCtaCte.Text.Trim());
            BMCajas bmCaja = new BMCajas(Connection);
            Cajas caja = new Cajas();
            caja.Id_Usuario = compra.Id_Usuario;
            caja = bmCaja.BMCajasAbiertaByUsuario(caja);
            compra.Id_Caja = caja.Id_Caja;
            compra.Obs = txtObs.Text;
            compra.Pago = Convert.ToDecimal(txtPago.Text.Trim());
            compra.CCostos = Convert.ToInt16(cboCCostos.SelectedItem.Value);
            if (cboTalon.SelectedItem.Value != "0")
            {
                PFCompras pfCompras = (PFCompras)Session["pfCompras"];
                compra.PFAnio = pfCompras.PFAnio;
                compra.PFMes = pfCompras.PFMes;
                compra.Factura = txtFactura.Text;
            }

            // Grabo Detalles
            List<ComprasDet> listaComprasDet = new List<ComprasDet>();
            listaComprasDet = (List<ComprasDet>)Session["listaComprasDet"];
            int item = 0;
            foreach (ComprasDet compraDet in listaComprasDet)
            {
                if (compraDet.Monto != 0)
                {
                    item++;
                    compraDet.Item = item;
                    compraDet.Id_Compras = compra.Id_Compras;
                    compra.Total += compraDet.Monto;
                    compra.Kilos += compraDet.Kilos;
                    bmComprasDet.BMComprasDetInsert(compraDet);

                    if (compraDet.Id_Articulo > 0)
                    {
                        ActualizaStock(compraDet);
                    }
                }
            }

            // Grabo Cabecera Compras
            bmCompras.BMComprasInsert(compra);
            lblAccion.Text = "Compra Guardada";

            // Imputacion Cta. Cte.
            if (compra.CtaCte > 0)
            {
                Proveedores proveedor = new Proveedores();
                BMProveedores bmProveedores = new BMProveedores(Connection);
                proveedor.Id_Proveedor = compra.Id_Proveedor;
                proveedor = bmProveedores.BMProveedoresGetOne(proveedor);
                Decimal dTemp = proveedor.Saldo;
                proveedor.Saldo = dTemp + compra.CtaCte;
                bmProveedores.BMProveedoresUpdate(proveedor);
                txtSaldo.Text = proveedor.Saldo.ToString();
                proveedor = null;
                bmProveedores = null;
            }

            // Grabo Egreso
            if (compra.Pago > 0)
            {
                BMEgresos bmEgresos = new BMEgresos(Connection);
                Egresos egreso = new Egresos();
                egreso = bmEgresos.BMEgresosGetNext();
                egreso.Id_Compra = compra.Id_Compras;
                egreso.Id_Proveedor = compra.Id_Proveedor;
                egreso.Concepto = "Compra Contado";
                egreso.Fecha = Fecha.GetFecha();
                egreso.Id_Caja = caja.Id_Caja;
                egreso.Id_Concepto = 3;
                egreso.Id_Usuario = compra.Id_Usuario;
                egreso.Monto = compra.Pago;
                egreso.Observaciones = "Compra Nro. " + compra.Id_Compras;
                bmEgresos.BMEgresosInsert(egreso);
            }

            btnNuevaCompra.Visible = true;
            btnLimpiar.Visible = false;
            btnGuardar.Visible = false;

        }
        catch (Exception ex) { ErrorUI(ex); }
    }
    #endregion

    #region NuevaCompra
    public void NuevaCompra()
    {
        try
        {
            DateTime dtHoy = DateTime.Now.Date;
            string sFecha = dtHoy.ToString().Remove(11);
            Fecha.SetFecha(Convert.ToDateTime(sFecha));

            btnNuevaCompra.Visible = false;
            btnLimpiar.Visible = true;
            btnGuardar.Visible = true;

            Limpiar();
            txtSaldo.Text = "";
            lblAccion.Text = "Carga Nueva Compra";

            Session["Accion"] = 1;

            btnBuscarArticulo.Enabled = true;
            trArticulo3.Visible = true;
            txtIdArticulo.Text = "";
            lblTitulo.Text = "COMPRAS - Bienes de Cambio";
            txtArticulo.Attributes.Clear();
            txtArticulo.Attributes.Add("readonly", "readonly");
            txtLote.Enabled = true;
            chkSS.Enabled = true;
            chkSS.Checked = false;
            cboCCostos.Enabled = true;
            CargarCCostos(1);
            cboCCostos.SelectedIndex = 0;

        }
        catch (Exception ex) { ErrorUI(ex); }
    }
    #endregion

    #region Limpiar
    public void Limpiar()
    {
        try
        {
            listaComprasDet = new List<ComprasDet>();
            ActualizarGrilla();
            txtTMonto.Text = "";
            txtTImpuesto.Text = "";
            txtPago.Text = "";
            txtCtaCte.Text = "";
            txtTotal.Text = "";
            txtObs.Text = "";
        }
        catch (Exception ex) { ErrorUI(ex); }
    }
    #endregion

    #region CargarCompra
    public void CargarCompra()
    {
        try
        {
            Compras compra = new Compras();
            compra.Id_Compras = Convert.ToInt32(Request.QueryString["Id_Compras"].ToString());
            compra.CCostos = 999;

            BMCompras bmCompras = new BMCompras(Connection);
            List<Compras> listaCompras = new List<Compras>();
            listaCompras = bmCompras.BMComprasSearch(compra, compra);
            Session["Compra"] = listaCompras[0];
            txtIdCompra.Text = listaCompras[0].Id_Compras.ToString();
            Proveedores proveedor = new Proveedores();
            BMProveedores bmProveedores = new BMProveedores(Connection);
            proveedor.Id_Proveedor = listaCompras[0].Id_Proveedor;
            proveedor = bmProveedores.BMProveedoresGetOne(proveedor);
            txtSaldo.Text = proveedor.Saldo.ToString();
            txtIdProveedor.Text = listaCompras[0].Id_Proveedor.ToString();
            txtProveedor.Text = listaCompras[0].Proveedor;
            Fecha.SetFecha(listaCompras[0].Fecha);
            decimal dTemp = Convert.ToDecimal(listaCompras[0].Pago);
            dTemp = Math.Round(dTemp, 2);
            txtPago.Text = dTemp.ToString();
            dTemp = Convert.ToDecimal(listaCompras[0].CtaCte);
            dTemp = Math.Round(dTemp, 2);
            txtCtaCte.Text = dTemp.ToString();
            dTemp = Convert.ToDecimal(listaCompras[0].Total);
            dTemp = Math.Round(dTemp, 2);
            txtTotal.Text = dTemp.ToString();
            txtObs.Text = listaCompras[0].Obs;
            int iIndex = 0;
            foreach (ListItem liItem in cboCCostos.Items)
            {
                if (liItem.Value == listaCompras[0].CCostos.ToString())
                {
                    cboCCostos.SelectedIndex = iIndex;
                    break;
                }
                iIndex++;
            }
            cboCCostos.Enabled = false;
            
            if (listaCompras[0].PFAnio > 0)
            {
                tdFactura1.Visible = true;
                tdFactura2.Visible = true;
                txtFactura.Text = listaCompras[0].Factura;
                trTasa.Visible = true;
                cboTalon.SelectedIndex = 1;
                lblPF.Visible = true;
                lblPFMes.Visible = true;
                lblPFAnio.Visible = true;
                List<Meses> listaMeses = ListaMeses();
                foreach (Meses mes in listaMeses)
                {
                    if (mes.Mes == listaCompras[0].PFMes)
                    {
                        lblPFMes.Text = mes.Nombre;
                        break;
                    }
                }
                lblPFAnio.Text = listaCompras[0].PFAnio.ToString();
            }
            cboTalon.Enabled = false;
            BMComprasDet bmComprasDet = new BMComprasDet(Connection);
            List<ComprasDet> listaComprasDet = new List<ComprasDet>();
            ComprasDet compraDet = new ComprasDet();
            compraDet.Id_Compras = listaCompras[0].Id_Compras;

            listaComprasDet = bmComprasDet.BMComprasDetGetAll(compraDet);
            Session["listaComprasDet"] = listaComprasDet;
            if (listaComprasDet.Count > 0)
            {
                if (listaComprasDet[0].Id_Articulo == 0)
                {
                    lblTitulo.Text = "COMPRAS - Bienes de Uso (Sin Stock)";
                    chkSS.Checked = true;
                }
            }
            chkSS.Enabled = false;

            ActualizarGrilla();

            ActualizarTotalCompra();

            lblAccion.Text = "Ver Compra - Boton Eliminar = anula Compra y revierte saldos";
            btnLimpiar.Visible = false;
            btnGuardar.Visible = false;
            btnNuevaCompra.Visible = false;
            btnBuscarProveedor.Visible = false;
            btnBuscarArticulo.Visible = false;
            txtPago.Attributes.Add("readonly", "readonly");
            txtCtaCte.Attributes.Add("readonly", "readonly");
            txtIdProveedor.Attributes.Add("readonly", "readonly");
            btnAgregar.Enabled = false;
            Fecha.Attributes.Add("readonly", "readonly");
            txtObs.Attributes.Add("readonly", "readonly");
            if (listaCompras[0].Id_Estado != 1)
            {
                btnEliminar.Enabled = false;
            }
            trArticulo1.Visible = false;
            trArticulo2.Visible = false;
            trArticulo3.Visible = false;
            cboTasas.Enabled = false;
            txtFactura.ReadOnly = true;

        }
        catch (Exception ex) { ErrorUI(ex); }
    }
    #endregion

    #region ActualizaStock
    protected void ActualizaStock(ComprasDet compraDet)
    {
        try
        {
            // Graba Movimiento de Stock
            BMMovStock bmMov = new BMMovStock(Connection);
            MovStock mov = new MovStock();
            mov.Id_Rubro = compraDet.Id_Rubro;
            mov.Id_SubRubro = compraDet.Id_SubRubro;
            mov.Id_Articulo = compraDet.Id_Articulo;
            mov.Lote = compraDet.Lote;
            mov = bmMov.BMMovStockGetNext(mov);
            mov.ALote = 0;
            mov.Fecha = Fecha.GetFecha();
            mov.Rubro = compraDet.Rubro;
            mov.SubRubro = compraDet.SubRubro;
            mov.Articulo = compraDet.Articulo;
            mov.Id_Operacion = Convert.ToInt16(txtIdCompra.Text.Trim());
            mov.Id_Usuario = compraDet.Id_Usuario;
            mov.Kilos = compraDet.Kilos;
            mov.Operacion = 3; // 1: Egreso - 2: Egreso - 3: Compra - 4: Venta
            mov.Saldo = compraDet.Stock + compraDet.Kilos;
            mov.Id_Usuario = compraDet.Id_Usuario;
            bmMov.BMMovStockInsert(mov);

            // Actualiza Saldo Stock
            BMStock bmStock = new BMStock(Connection);
            Stock stock = new Stock();
            stock.Id_Rubro = compraDet.Id_Rubro;
            stock.Rubro = compraDet.Rubro;
            stock.Id_SubRubro = compraDet.Id_SubRubro;
            stock.SubRubro = compraDet.SubRubro;
            stock.Id_Articulo = compraDet.Id_Articulo;
            stock = bmStock.BMStockGetOne(stock);
            Decimal dStock = stock.Saldo;
            stock.Saldo = dStock + compraDet.Kilos;
            bmStock.BMStockUpdate(stock);

            // Actualiza Saldo Lote
            if (stock.UsaLotes == 1)
            {
                VentasDet ventaDet = new VentasDet();
                BMLotes bmLotes = new BMLotes(Connection);
                ventaDet.Id_Articulo = compraDet.Id_Articulo;
                ventaDet.Articulo = compraDet.Articulo;
                ventaDet.Id_Rubro = compraDet.Id_Rubro;
                ventaDet.Id_SubRubro = compraDet.Id_SubRubro;
                ventaDet.Lote = compraDet.Lote;
                ventaDet.Kilos = compraDet.Kilos * -1;
                ventaDet.Costo = compraDet.Precio;
                ventaDet.Id_Usuario = compraDet.Id_Usuario;

                bmLotes.BMLotesUpdateSaldo(ventaDet);
            }

            bmMov = null;
            mov = null;
            bmStock = null;
            stock = null;

        }
        catch (Exception ex) { ErrorUI(ex); }
    }
    #endregion

    #region BuscarArticulo
    public void BuscarArticulo()
    {
        try
        {
            #region dispararPopUp(hacePostBack)

            string scriptSession = @"
            <script language=""javascript"" type=""text/javascript"">
                function mostrarArticulo()
                {
                    var stringURL = 'BuscarArticulo.aspx?pStation=0';
                    // alert(stringURL);
                    var newWin = window.open(stringURL, ""popup"", ""menubar=no, resizable=no, scrollbars=yes, height=500, width=650, left=100, top=100"");
                }
                mostrarArticulo();
            </script>
            ";

            Page.ClientScript.RegisterStartupScript(this.GetType(), "ScriptA", scriptSession);
            #endregion
        }
        catch (Exception ex) { ErrorUI(ex); }
    }
    #endregion

    #region gridDataBaund
    protected void gridDataBaund()
    {
        try
        {
            gvComprasDet.DataSource = listaComprasDet;
            gvComprasDet.DataBind();
        }
        catch (Exception ex) { ErrorUI(ex); }
    }
    #endregion

    #region ActualizarTotalCompra
    protected void ActualizarTotalCompra()
    {
        try
        {
            Decimal dMonto = 0;
            Decimal dImpuesto = 0;
            Decimal dTotal = 0;
            foreach (ComprasDet item in listaComprasDet)
            {
                dMonto += item.Monto;
                dImpuesto += item.Impuesto;
                dTotal += item.Total;
            }
            txtTMonto.Text = dMonto.ToString();
            txtTImpuesto.Text = dImpuesto.ToString();
            txtTotal.Text = dTotal.ToString();
        }
        catch (Exception ex) { ErrorUI(ex); }
    }
    #endregion

    #region LimpiarItem
    protected void LimpiarItem()
    {
        try
        {
            txtRubro.Value = "";
            txtSubRubro.Value = "";
            txtIdArticulo.Text = "";
            txtArticulo.Text = "";
            txtCodBarra.Text = "";
            txtStock.Text = "";
            txtCantidad.Text = "0";
            txtPrecio.Text = "0";
            txtTotalItem.Text = "";
            txtLote.Text = "0";
            FechaVto.SetFecha(null);
        }
        catch (Exception ex) { ErrorUI(ex); }
    }
    #endregion

    #region ActualizarGrilla
    protected void ActualizarGrilla()
    {
        try
        {
            Session["listaComprasDet"] = listaComprasDet;
            gridDataBaund();
        }
        catch (Exception ex) { ErrorUI(ex); }
    }
    #endregion

    #region AgregarItem
    protected void AgregarItem()
    {
        try
        {
            // Hidrata nuevo item y agregar a la lista de items
            ComprasDet nuevoItem = new ComprasDet();
            nuevoItem.Articulo = txtArticulo.Text;
            nuevoItem.Id_Articulo = Convert.ToInt16(txtIdArticulo.Text);
            SubRubros subRubro = (SubRubros)Session["SubRubro"];
            nuevoItem.Id_Rubro = subRubro.Id_Rubro;
            nuevoItem.Rubro = subRubro.Rubro;
            nuevoItem.Id_SubRubro = subRubro.Id_SubRubro;
            nuevoItem.SubRubro = subRubro.SubRubro;
            //nuevoItem.Id_Compras = Convert.ToInt64(txtIdCompra.Text);     se actualizara al Grabar
            listaComprasDet = (List<ComprasDet>)Session["listaComprasDet"];
            int iItems = listaComprasDet.Count;
            iItems++;
            nuevoItem.Item = iItems;
            nuevoItem.Kilos = Convert.ToDecimal(txtCantidad.Text);
            nuevoItem.Lote = txtLote.Text;
            nuevoItem.Monto = Convert.ToDecimal(txtTotalItem.Text);
            nuevoItem.Precio = Convert.ToDecimal(txtPrecio.Text);
            Decimal dStock = Convert.ToDecimal(txtStock.Text);
            nuevoItem.Stock = dStock + nuevoItem.Kilos;
            if (int.Parse(cboTalon.SelectedItem.Value) > 0)
            {
                if (nuevoItem.Monto > 0)
                {
                    nuevoItem.TTasa = Convert.ToInt16(cboTasas.SelectedItem.Value);
                    decimal dTasa = decimal.Parse(txtTasa.Text);
                    nuevoItem.Tasa = Decimal.Round(dTasa, 3);
                    decimal dImpuesto = nuevoItem.Monto * dTasa;
                    nuevoItem.Impuesto = Decimal.Round(dImpuesto, 2);
                }
            }
            decimal dTotal = nuevoItem.Monto + nuevoItem.Impuesto;
            nuevoItem.Total = Decimal.Round(dTotal, 2);
            listaComprasDet.Add(nuevoItem);
            Session["listaComprasDet"] = listaComprasDet;

            ActualizarTotalCompra();

            LimpiarItem();

            ActualizarGrilla();
        }
        catch (Exception ex) { ErrorUI(ex); }
    }
    #endregion

    #region Eliminar
    public void Eliminar()
    {
        try
        {
            // Elimina Compra y revierte saldos de stock, caja y proveedor
            BMCompras bmCompras = new BMCompras(Connection);
            Compras compra = new Compras();
            compra = (Compras)Session["Compra"];
            compra.Obs = "Anulada: " + DateTime.Now.ToString();
            compra.Id_Estado = 2;
            compra.Estado = "Anulado";
            bmCompras.BMComprasUpdate(compra);

            if (txtCtaCte.Text != "")
            {
                Decimal dCtaCte = Convert.ToDecimal(txtCtaCte.Text);
                if (dCtaCte > 0)
                {
                    BMProveedores bmProveedores = new BMProveedores(Connection);
                    Proveedores proveedor = new Proveedores();
                    proveedor.Id_Proveedor = Convert.ToInt64(txtIdProveedor.Text);
                    proveedor = bmProveedores.BMProveedoresGetOne(proveedor);
                    Decimal dSaldo = dCtaCte;
                    proveedor.Saldo = proveedor.Saldo - dSaldo;
                    bmProveedores.BMProveedoresUpdateSaldo(proveedor);
                }
            }

            if (txtPago.Text != "")
            {
                Decimal dPago = Convert.ToDecimal(txtPago.Text);
                if (dPago > 0)
                {
                    BMEgresos bmEgresos = new BMEgresos(Connection);
                    Egresos egreso = new Egresos();
                    egreso = bmEgresos.BMEgresosGetNext();
                    BMCajas bmCaja = new BMCajas(Connection);
                    Cajas caja = new Cajas();
                    Usuarios usuario = new Usuarios();
                    usuario = (Usuarios)Session["UsuarioActual"];
                    caja.Id_Usuario = usuario.Id_Usuario;
                    caja = bmCaja.BMCajasAbiertaByUsuario(caja);
                    egreso.Concepto = "Compra anulada";
                    egreso.Id_Compra = compra.Id_Compras;
                    egreso.Fecha = Fecha.GetFecha();
                    egreso.Id_Caja = caja.Id_Caja;
                    egreso.Id_Proveedor = Convert.ToInt64(txtIdProveedor.Text);
                    egreso.Id_Concepto = 3;
                    egreso.Id_Usuario = usuario.Id_Usuario;
                    egreso.Monto = dPago * (-1);
                    egreso.Observaciones = "Compra Anulada Nro. " + txtIdCompra.Text;
                    bmEgresos.BMEgresosInsert(egreso);
                }
            }

            listaComprasDet = (List<ComprasDet>)Session["listaComprasDet"];
            if (listaComprasDet[0].Id_Articulo > 0)  // es Compra de Bienes de Uso Sin Stock
            {
                foreach (ComprasDet item in listaComprasDet)
                {
                    if (item.Kilos > 0)
                    {
                        item.Kilos = item.Kilos * (-1);
                        ActualizaStock(item);
                    }
                }
            }

            lblAccion.Text = "Compra Eliminada";
        }
        catch (Exception ex) { throw ex; }
    }
    #endregion

    #region CargarTalonarios
    protected void CargarTalonarios()
    {
        try
        {
            cboTalon.Enabled = true;
            ListItem item0 = new ListItem();
            item0.Value = "0";
            item0.Text = "Sin Factura";
            cboTalon.Items.Add(item0);
            ListItem item1 = new ListItem();
            item1.Value = "1";
            item1.Text = "Con Factura";
            cboTalon.Items.Add(item1);
            tdFactura1.Visible = false;
            tdFactura2.Visible = false;
            trTasa.Visible = false;
        }
        catch (Exception ex) { ErrorUI(ex); }
    }
    #endregion

    #region CargarTasas
    protected void CargarTasas()
    {
        try
        {
            listaTasas = new List<Impuestos>();
            
            BMImpuestos bmImpuestos = new BMImpuestos(Connection);
            Impuestos pImpuesto = new Impuestos();
            pImpuesto.Tipo = "C";
            listaTasas = bmImpuestos.BMImpuestosGetAll(pImpuesto);
            Session["listaTasas"] = listaTasas;

            foreach (Impuestos itemImpuesto in listaTasas)
            {
                if (itemImpuesto.Tasa != 0)
                {
                    ListItem liItem = new ListItem();
                    liItem.Value = itemImpuesto.Id.ToString();
                    liItem.Text = itemImpuesto.Nombre;
                    cboTasas.Items.Add(liItem);
                }
            }
            if (listaTasas.Count > 0)
            {
                txtTasa.Text = listaTasas[0].Tasa.ToString();
            }
        }
        catch (Exception ex) { ErrorUI(ex); }
    }
    #endregion

    #region AgregaCodigoBarras
    protected void AgregaCodigoBarras()
    {
        try
        {

            //codigo de barras, ej.: 123 esta en la base
            List<Stock> listaStock = new List<Stock>();
            BMStock bmStock = new BMStock(Connection);
            Stock stock = new Stock();
            Lotes lote = new Lotes();
            List<Lotes> listaLotes = new List<Lotes>();

            // Separar codigo de barra del numero de lote ( se toma como minimo 4 caracteres para articulo)
            string sArticulo = "";
            if (txtCodBarra.Text.Trim().Length > 3)
            {
                if (Connection == "c073")
                {
                    if (txtCodBarra.Text.Trim().Length > 9)
                    {
                        sArticulo = txtCodBarra.Text.Trim().Remove(9);
                    }
                    else
                    {
                        sArticulo = txtCodBarra.Text.Trim();
                    }
                }
                else
                {

                    sArticulo = txtCodBarra.Text.Trim();
                }
            }
            else
            {
                lblMensaje.Text = "Error en Cod. de Barras ( el mínimo es de 4 caracteres)";
                mpeMensaje.Show();
                return;
            }

            stock.CodigoBarra = sArticulo;
            listaStock = bmStock.BMStockSearchCodBarr(stock);
            if (listaStock.Count == 1)
            {
                stock = listaStock[0];

                if (stock.UsaLotes == 1)
                {
                    // Usa Lotes
                    lote.Id_Rubro = stock.Id_Rubro;
                    lote.Id_SubRubro = stock.Id_SubRubro;
                    lote.Id_Articulo = stock.Id_Articulo;
                    if (txtCodBarra.Text.Trim().Length > stock.LargoArt)
                    {
                        lote.Lote = txtCodBarra.Text.Trim().Remove(0, stock.LargoArt);
                    }
                    lote.Estado = 1;
                    BMLotes bmLotes = new BMLotes(Connection);
                    listaLotes = bmLotes.BMLotesSearch(lote);
                    if (listaLotes.Count == 0)
                    {
                        if (stock.AutoLote == 1)
                        {
                            // Agregar lote nuevo
                            stock.Lote = AgregaLoteNuevo(stock);
                            lote.Id_Rubro = stock.Id_Rubro;
                            lote.Id_SubRubro = stock.Id_SubRubro;
                            lote.Id_Articulo = stock.Id_Articulo;
                            lote.Lote = stock.Lote;
                            lote.Estado = 1;
                            bmLotes = new BMLotes(Connection);
                            listaLotes = bmLotes.BMLotesSearch(lote);
                        }
                        else
                        {
                            lblMensaje.Text = "Lote No Existe.";
                            mpeMensaje.Show();
                            return;
                        }
                    }
                    else
                    {
                        if (stock.AutoLote == 1)
                        {
                            if (lote.Lote == "0")
                            {
                                // Agregar lote nuevo
                                stock.Lote = AgregaLoteNuevo(stock);
                                if (stock.Lote == "0")
                                {
                                    lblMensaje.Text = "No se puede usar Autolote: algún lote no es Numérico";
                                    mpeMensaje.Show();
                                    return;
                                }
                                lote.Id_Rubro = stock.Id_Rubro;
                                lote.Id_SubRubro = stock.Id_SubRubro;
                                lote.Id_Articulo = stock.Id_Articulo;
                                lote.Lote = stock.Lote;
                                lote.Estado = 1;
                                bmLotes = new BMLotes(Connection);
                                listaLotes = bmLotes.BMLotesSearch(lote);
                            }
                            else
                            {
                                lblMensaje.Text = "Lote ";
                                lblMensaje.Text += lote.Lote.ToString();
                                lblMensaje.Text += " ya existe para Auto Lote.";
                                mpeMensaje.Show();
                                return;
                            }
                        }
                    }
                    if (listaLotes.Count > 1)
                    {
                        if (stock.AutoLote == 1)
                        {
                            // Agregar lote nuevo
                            lblMensaje.Text = "Auto Lote no puede decidir nuevo número de Lote.";
                            mpeMensaje.Show();
                            return;
                        }
                        else
                        {
                            lblMensaje.Text = "Hay mas de un Lote habilitado: Deberá Buscar Artículo y Lote.";
                            mpeMensaje.Show();
                            return;
                        }
                    }
                    if (listaLotes.Count == 1)
                    {
                        txtLote.Text = listaLotes[0].Lote.ToString();
                        listaStock = bmStock.BMStockSearch(stock);
                        if (listaStock.Count > 0)
                        {
                            // valida lote
                            if (stock.Lote != "0")
                            {
                                lote = new Lotes();
                                lote.Id_Rubro = listaStock[0].Id_Rubro;
                                lote.Id_SubRubro = listaStock[0].Id_SubRubro;
                                lote.Id_Articulo = listaStock[0].Id_Articulo;
                                lote.Lote = stock.Lote;
                                bmLotes = new BMLotes(Connection);
                                lote = bmLotes.BMLotesGetOne(lote);
                                if (lote.Id_Articulo == 0)
                                {
                                    lblMensaje.Text = "Lote Inexistente.";
                                    mpeMensaje.Show();
                                    return;
                                }
                                if (lote.Estado == 0)
                                {
                                    lblMensaje.Text = "Lote Cerrado.";
                                    mpeMensaje.Show();
                                    return;
                                }
                            }

                            txtRubro.Value = listaStock[0].Id_Rubro.ToString();
                            txtSubRubro.Value = listaStock[0].Id_SubRubro.ToString();
                            txtIdArticulo.Text = listaStock[0].Id_Articulo.ToString();
                            txtArticulo.Text = listaStock[0].Articulo;
                            txtStock.Text = listaStock[0].Saldo.ToString();
                            //txtPrecio.Text = listaStock[0].Precio.ToString().Replace(".", ",");
                            if (txtPrecio.Text == "0")
                            {
                                txtPrecio.Text = listaStock[0].Precio.ToString();
                            }
                            txtCantidad.Text = txtCantBarra.Text;
                            if (txtCantidad.Text != "" && txtPrecio.Text != "")
                            {
                                Decimal dCantidad = Convert.ToDecimal(txtCantidad.Text);
                                if (dCantidad > 0)
                                {
                                    Decimal dPrecio = Convert.ToDecimal(txtPrecio.Text);
                                    Decimal dItem = dCantidad * dPrecio;
                                    txtTotalItem.Text = dItem.ToString();
                                }
                                else
                                {
                                    lblMensaje.Text = "Debe informar Cantidad y Precio.";
                                    mpeMensaje.Show();
                                }
                            }
                            else
                            {
                                lblMensaje.Text = "Debe informar Cantidad y Precio.";
                                mpeMensaje.Show();
                            }

                            SubRubros subRubo = new SubRubros();
                            subRubo.Id_Rubro = listaStock[0].Id_Rubro;
                            subRubo.Rubro = listaStock[0].Rubro;
                            subRubo.Id_SubRubro = listaStock[0].Id_SubRubro;
                            subRubo.SubRubro = listaStock[0].SubRubro;
                            Session["subRubro"] = subRubo;

                            AgregarItem();
                        }
                    }
                    else
                    {
                        lblMensaje.Text = "Hay mas de una posibilidad de elección de Lote: deberá Buscar Artículo y Lote.";
                        mpeMensaje.Show();
                        listaStock = null;
                        bmStock = null;
                        stock = null;
                        return;
                    }
                }
                else
                {
                    // No Usa Lotes 
                    txtLote.Text = "0";
                    txtRubro.Value = listaStock[0].Id_Rubro.ToString();
                    txtSubRubro.Value = listaStock[0].Id_SubRubro.ToString();
                    txtIdArticulo.Text = listaStock[0].Id_Articulo.ToString();
                    txtArticulo.Text = listaStock[0].Articulo;
                    txtStock.Text = listaStock[0].Saldo.ToString();
                    //txtPrecio.Text = listaStock[0].Precio.ToString().Replace(".", ",");
                    if (txtPrecio.Text == "0")
                    {
                        txtPrecio.Text = listaStock[0].Precio.ToString();
                    }
                    txtCantidad.Text = txtCantBarra.Text;
                    if (txtCantidad.Text != "" && txtPrecio.Text != "")
                    {
                        Decimal dCantidad = Convert.ToDecimal(txtCantidad.Text);
                        if (dCantidad > 0)
                        {
                            Decimal dPrecio = Convert.ToDecimal(txtPrecio.Text);
                            Decimal dItem = dCantidad * dPrecio;
                            txtTotalItem.Text = dItem.ToString();
                        }
                        else
                        {
                            lblMensaje.Text = "Debe informar Cantidad y Precio.";
                            mpeMensaje.Show();
                        }
                    }
                    else
                    {
                        lblMensaje.Text = "Debe informar Cantidad y Precio.";
                        mpeMensaje.Show();
                    }

                    SubRubros subRubo = new SubRubros();
                    subRubo.Id_Rubro = listaStock[0].Id_Rubro;
                    subRubo.Rubro = listaStock[0].Rubro;
                    subRubo.Id_SubRubro = listaStock[0].Id_SubRubro;
                    subRubo.SubRubro = listaStock[0].SubRubro;
                    Session["subRubro"] = subRubo;

                    AgregarItem();
                }
            }
            else
            {
                if (listaStock.Count > 0)
                {
                    lblMensaje.Text = "Hay mas de una posibilidad de elección: deberá Buscar Artículo.";
                    mpeMensaje.Show();
                }
                else
                {
                    lblMensaje.Text = "Artículo No encontrado.";
                    mpeMensaje.Show();
                }
            }

            listaStock = null;
            bmStock = null;
            stock = null;
            txtCodBarra.Focus();
        }
        catch (Exception ex) { ErrorUI(ex); }
    }
    #endregion

    #region AgregaLoteNuevo
    protected string AgregaLoteNuevo(Stock stock)
    {
        Int64 iLote = 0;
        try
        {
            if(f.isNumeric(stock.Lote))
            {
                string sArticulo = "";
                string sLote = "";
                BMLotes bmLotes = new BMLotes(Connection);
                Lotes lote = new Lotes();
                List<Lotes> listaLotes = new List<Lotes>();
                if (stock.LargoArt > 0 && txtCodBarra.Text.Trim().Length > stock.LargoArt)
                {
                    sArticulo = txtCodBarra.Text.Trim().Remove(stock.LargoArt);
                    sLote = txtCodBarra.Text.Trim().Remove(0, stock.LargoArt);
                    if(f.isNumeric(sLote))
                    {
                        iLote = Convert.ToInt32(sLote);
                    }
                }
                else
                {
                    sArticulo = txtCodBarra.Text.Trim();
                    if (txtLote.Text == "0")
                    {
                        // Busca Próximo Número de Lote
                        lote = new Lotes();
                        lote.Id_Rubro = stock.Id_Rubro;
                        lote.Id_SubRubro = stock.Id_SubRubro;
                        lote.Id_Articulo = stock.Id_Articulo;
                        lote.Lote = stock.Lote;
                        
                        listaLotes = bmLotes.BMLotesSearch(lote);
                        if (listaLotes.Count == 0)
                        {
                            iLote = 1;
                        }
                        else
                        {
                            if (f.isNumeric(listaLotes[listaLotes.Count - 1].Lote))
                            {
                                iLote = Convert.ToInt32(listaLotes[listaLotes.Count - 1].Lote);
                                iLote++;
                            }
                            else
                            {
                                // devuelve 0 como error.
                                return iLote.ToString();
                            }
                        }
                    }
                    else
                    {

                        //  ojo aca
                        if (f.isNumeric(txtLote.Text.Trim()))
                        {
                            iLote = Convert.ToInt32(txtLote.Text);
                        }
                        lblMensaje.Text = "No se puede usar Autolote si el código no es Numérico";
                        mpeMensaje.Show();
                    }
                }
                lote.Id_Rubro = stock.Id_Rubro;
                lote.Id_SubRubro = stock.Id_SubRubro;
                lote.Id_Articulo = stock.Id_Articulo;
                lote.Articulo = stock.Articulo;
                lote.Lote = iLote.ToString();
                lote.Estado = 1;
                lote.FechaVto = FechaVto.GetFecha();
                lote = bmLotes.BMLotesInsert(lote);
            }
            else
            {
                lblMensaje.Text = "No se puede usar Autolote si el código no es Numérico";
                mpeMensaje.Show();
                return iLote.ToString();
            }
        }
        catch (Exception ex) { ErrorUI(ex); }
        return iLote.ToString();
    }
    #endregion

    #region CargarCCostos
    private void CargarCCostos(int iAccion)
    {
        try
        {
            List<CentrosCostos> listaCCostos = new List<CentrosCostos>();
            BMCentrosCostos bmCCostos = new BMCentrosCostos(Connection);
            if (iAccion == 1)
            {
                listaCCostos = bmCCostos.BMCentrosCostosGetAllActivos();
            }
            else
            {
                listaCCostos = bmCCostos.BMCentrosCostosGetAll();
            }
            foreach (CentrosCostos ccostos in listaCCostos)
            {
                ListItem liItem = new ListItem();
                liItem.Value = ccostos.IdCentrosCostos.ToString();
                liItem.Text = ccostos.Nombre;
                cboCCostos.Items.Add(liItem);
            }
        }
        catch (Exception ex) { ErrorUI(ex); }
    }
    #endregion

    #endregion
}
   
